/**
 * @file show.c
 * @brief OLED显示相关功能实现
 * @author 废话文学创始人
 * @version 1.0
 * @date 2024-07-14
 */

#include <show.h>
// oled相关
char oled_print_buf[30];
u8g2_t u8g2;
// 其他
extern Kalman filter_rp1;
extern int16_t actual;
// PID相关
extern PID pid;

/**
 * @brief OLED显示初始化
 * @note 设置字体并清空显示缓冲区
 */
void show_init(void)
{
    u8g2Init(&u8g2);
    u8g2_SetFont(&u8g2, u8g2_font_wqy12_t_chinese1); // 设置字体
    u8g2_ClearBuffer(&u8g2);
    u8g2_UpdateDisplay(&u8g2);
}

/**
 * @brief OLED显示主界面
 * @note 显示速度控制相关参数
 */
void show(void)
{
    u8g2_ClearBuffer(&u8g2);
    sprintf(oled_print_buf, "speed control");
    u8g2_DrawStr(&u8g2, 0, 10, oled_print_buf);
    sprintf(oled_print_buf, "Target: %d", (int)PID_Target_Get(pid));
    u8g2_DrawStr(&u8g2, 0, 20, oled_print_buf);
    sprintf(oled_print_buf, "Actual: %d", actual);
    u8g2_DrawStr(&u8g2, 0, 30, oled_print_buf);
    sprintf(oled_print_buf, "Output: %d", (int)PID_Output_Get(pid));
    u8g2_DrawStr(&u8g2, 0, 40, oled_print_buf);
    sprintf(oled_print_buf, "kp: %.3f", pid.parameter.kp);
    u8g2_DrawStr(&u8g2, 80, 20, oled_print_buf);
    sprintf(oled_print_buf, "ki: %.3f", pid.parameter.ki);
    u8g2_DrawStr(&u8g2, 80, 30, oled_print_buf);
    sprintf(oled_print_buf, "kd: %.3f", pid.parameter.kd);
    u8g2_DrawStr(&u8g2, 80, 40, oled_print_buf);
    u8g2_UpdateDisplay(&u8g2);
}